Computer systems including those used by office workers, technicians, and scientists are subject to frequent change. Some change is attributable to improvements that make the computer system perform more closely to goals of a predetermined computer system specification. Other change is attributable to improvements beyond the scope of the original specification, for example when users' expectations change as to what the computer system ought to be able to do. Rapid application of new technologies has caused users to consider components obsolete when desirable functions, which were not part of the original component, cannot be added.
The conventional computer system includes a general purpose computer component having memory and processing resources tightly coupled within one enclosure. Other components, as for example input/output equipment, are conventionally packaged in other separate enclosures. These separately enclosed computer system components, known as "peripherals," have grown in complexity so that some, including laser printers, for example, include a special purpose computing circuit with considerable internal memory and processing resources dedicated to the execution of a special purpose operating system and a peripheral program.
General purpose computing components (computers) and input/output equipment (printers, scanners, etc.) are developed and marketed by independent suppliers. Functional cooperation of a computer and peripheral conventionally relies on driver software, running on the computer, to operate the peripheral in an efficient manner. Poor quality operation may result when driver software is unable to take advantage of peripheral functions embedded in the peripheral program. As a case in point, poor printing quality may result when driver software is unable to pass geometric graphic image items such as circles to the printer, renders graphic image items into bit-map form, and passes only bit-map data to the printer. No advantage is taken of edge enhancement functions of the peripheral program in such a case.
The peripheral program code is conventionally stored in nonvolatile memory in directly executable format. The peripheral program's capabilities are evidenced as functional aspects (functions) of the peripheral. To modify or add functions, nonvolatile memory components are added or installed in place of original memory components. These added components provide additional stored, directly executable, program code. Some functions, such as the ability of a laser printer to print in a particular font, are defined in nonexecutable format. To modify or add such functions, preprogrammed nonvolatile memory components are installed or data is transferred across an electrical signal interface to be stored in volatile memory. Such transfer is conventionally called downloading.
The address space of a conventional special purpose computing circuit is limited to one or a predetermined few regions for nonvolatile memory and one or a predetermined few regions for volatile memory. When additional functions are installed, the peripheral program scans the address space to identify installed and downloaded program code and data for incorporation into the peripheral program and, consequently, into the functional aspects of the peripheral.
Peripherals are said to "evolve" as a result of modifying or adding functions because the new or modified functions are often, though not necessarily, related to one or more originally provided functions. Because computer systems are subject to frequent change, it is desirable to meet such change with peripherals that are capable of evolving with less difficulty. Difficulties include the installation of physical memory components, the time consumed in downloading, and the limitations of address space in conventional systems. These difficulties significantly increase costs associated with computer systems including the cost of ownership in a changing environment and the cost of maintaining a system that meets changing specifications.
In view of the problems described above and related problems, the need remains for systems and methods that facilitate functional evolution for printers.
Further technical background includes: "Developing Client/Server Applications," by W. H. Inmon, QED Publishing Group of Wellesley Mass., 1993; "RPC for NT," by Guy Eddon, R&D Publications of Lawrence Kans., 1994; and "Object-Oriented Languages, Systems and Applications," edited by Gordon Blair, et al., Halsted Press of New York N.Y., 1991; "Advanced Windows NT," by Jeffrey Richter, Microsoft Press of Redmond Wash., 1994; "Learn Java++ Now," by Stephen R. Davis, Microsoft Press of Redmond Wash., 1996; and the bibliographic references contained therein.